home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_pyr_hyenamaker.cog < prev    next >
Text File  |  1999-11-15  |  9KB  |  371 lines

  1. # Jones 3D Cog Script
  2. #
  3. # PYR_HyenaMaker.cog
  4. #
  5. # Makes hyenas
  6. #
  7. # [RKD] & [Scholl]
  8. #
  9. # (C) 1998 LucasArts Entertainment Co. All Rights Reserved
  10. # ========================================================================================
  11.  
  12. symbols
  13.  
  14. message    startup
  15. message    killed
  16. message    timer
  17. message    user1
  18.  
  19. #Group 0: upon startup, chase the kid into the pyramid
  20. thing    hyenastart1        mask=0x448 # Mask for player, weapons, and explosions
  21. thing    hyenastart2        mask=0x448 # Mask for player, weapons, and explosions
  22. thing    hyenastart3        mask=0x448 # Mask for player, weapons, and explosions
  23.  
  24. # Near waypoint 0
  25. thing    hyenaghost1
  26. thing    hyenaghost2
  27. thing    hyenaghost3
  28.  
  29. # Near waypoint 14
  30. thing    hyenaghost4
  31. thing    hyenaghost5
  32. thing    hyenaghost6
  33.  
  34. #Near waypoint 20
  35. thing    hyenaghost7
  36. thing    hyenaghost8
  37. thing    hyenaghost9
  38.  
  39. thing    hyena1        mask=0x448    local
  40. thing    hyena2        mask=0x448    local
  41. thing    hyena3        mask=0x448    local
  42.  
  43. thing    sender                    local
  44.  
  45. # hyena sectors
  46. sector    group0sector    nolink
  47. sector    group1sector    nolink
  48. sector    group2sector    nolink
  49.  
  50. thing    jeep
  51.  
  52. cog        c_KidCog
  53.  
  54. sound    victory=mus_gen_indy_b_motif1.wav    local
  55.  
  56. thing    hint12
  57.  
  58. template    hyenamodel=hyena    local
  59.  
  60. int        groupnum    local
  61. int        killnum=0    local
  62.  
  63. int            n_IndyLastWaypoint        local
  64. int            b_WpntsActive=0            local
  65. int            n_idx                    local
  66.  
  67. # ===========================WAYPOINTS================================================
  68. int            NUM_WAYPOINTS=24            local
  69. thing        t_Waypoint00
  70. thing        t_Waypoint01
  71. thing        t_Waypoint02
  72. thing        t_Waypoint03
  73. thing        t_Waypoint04
  74. thing        t_Waypoint05
  75. thing        t_Waypoint06
  76. thing        t_Waypoint07
  77. thing        t_Waypoint08
  78. thing        t_Waypoint09
  79. thing        t_Waypoint10
  80. thing        t_Waypoint11
  81. thing        t_Waypoint12
  82. thing        t_Waypoint13
  83. thing        t_Waypoint14
  84. thing        t_Waypoint15
  85. thing        t_Waypoint16
  86. thing        t_Waypoint17
  87. thing        t_Waypoint18
  88. thing        t_Waypoint19
  89. thing        t_Waypoint20
  90. thing        t_Waypoint21
  91. thing        t_Waypoint22
  92. thing        t_Waypoint23
  93.  
  94.  
  95. # ===========================TIMER STUFF================================================
  96. int            n_TimerID                local
  97.  
  98. flex        HYENA_CREATION_DELAY=10.0            local
  99. int            TIMER_ID_CONSIDER_HYENA_CREATION=0    local
  100.  
  101.  
  102. # =========================== MISC CONSTANTS ================================================
  103. int            MAX_NUM_HYENAS=11                    local
  104.  
  105. # =========================== SUBROUTINES ================================================
  106. flex        MakeHyenas            local
  107. flex        ActivateWaypoints    local
  108.  
  109. end
  110.  
  111. # ========================================================================================
  112. code
  113. startup:
  114.     Sleep(.01);
  115.  
  116.     #global8 keeps track of how many total hyenas have been killed
  117.     global8 = 0;
  118.     killnum = 0;
  119.  
  120.     # assign hyenas
  121.     hyena1 = hyenastart1;
  122.     hyena2 = hyenastart2;
  123.     hyena3 = hyenastart3;
  124.  
  125.     Sleep(45);
  126.     
  127.     call ActivateWaypoints;
  128.     return;
  129.  
  130. # ========================================================================================
  131.  
  132. killed:
  133. # ---> hyenas
  134.  
  135.     sender = GetSenderRef();
  136.     
  137.     if (sender == hyena1)
  138.     {
  139.         hyena1 = -1;
  140.     }
  141.     else if (sender == hyena2)
  142.     {
  143.         hyena2 = -1;
  144.     }
  145.     else if (sender == hyena3)
  146.     {
  147.         hyena3 = -1;
  148.     }
  149.     
  150.     # update # of dead hyenas in this batch and overall
  151.     killnum = killnum + 1;
  152.     global8 = global8 + 1;
  153.  
  154.     Print("hyenas killed =");
  155.     PrintInt(global8);
  156.  
  157.     # Tell kid cog that a Hyena has died
  158.     SendMessageEx(c_KidCog, 28, 0, 0, 0, 0);
  159.  
  160.     # if all have been killed, turn off hint12
  161.     if (global8 >= MAX_NUM_HYENAS)
  162.     {
  163.         Print("all hyenas killed");
  164.         SetHintSolved(hint12);
  165.         sleep(.75);
  166.         PlaySoundLocal(victory, 1, 0, 0, 0);
  167.         return;
  168.     }
  169.  
  170.     # Don't generate any more if 3 sets of three have been killed
  171.     if (global8 >= 9)
  172.     {
  173.         return;
  174.     }
  175.  
  176.     # if the previous batch was killed, prepare for next batch
  177.     if (killnum == 3)
  178.     {
  179.         killnum = -1;
  180.         n_IndyLastWaypoint = AIFindNearestWpnt(GetLocalPlayerThing());
  181.         SetTimerEx(HYENA_CREATION_DELAY, TIMER_ID_CONSIDER_HYENA_CREATION, 0, 0);
  182.     }
  183.  
  184.     return;
  185.  
  186. # ========================================================================================
  187. user1:
  188. # ---> KidVSIndy1 cog, when Indy enters hole
  189.     
  190.     if (hyena1 != -1)
  191.     {
  192.         AIFlee(hyena1, GetLocalPlayerThing());
  193.     }
  194.     
  195.     if (hyena2 != -1)
  196.     {
  197.         AIFlee(hyena2, GetLocalPlayerThing());
  198.     }
  199.     
  200.     if (hyena2 != -1)
  201.     {
  202.         AIFlee(hyena3, GetLocalPlayerThing());
  203.     }
  204.  
  205.     return;
  206.  
  207.  
  208. # ========================================================================================
  209. timer:
  210.     n_TimerID = GetSenderID();
  211.     if (n_TimerID == TIMER_ID_CONSIDER_HYENA_CREATION)
  212.     {
  213.         if ( (n_IndyLastWaypoint != AIFindNearestWpnt(GetLocalPlayerThing()))
  214.              || (n_IndyLastWaypoint == -1)    // only necessary until waypoints pasted into level
  215.              )
  216.         {
  217.             # Indy has moved, lets make us some Hyenas
  218.             call MakeHyenas;
  219.         }
  220.         else
  221.         {
  222.             # Indy hasn't moved. Try again later
  223.             SetTimerEx(HYENA_CREATION_DELAY, TIMER_ID_CONSIDER_HYENA_CREATION, 0, 0);
  224.         }
  225.  
  226.     }
  227.  
  228.     return;
  229.  
  230. # ========================================================================================
  231. ActivateWaypoints:
  232.     if (b_WpntsActive)
  233.     {
  234.         return;
  235.     }
  236.  
  237.     b_WpntsActive = 1;
  238.     AISetInstinctWpntMode(hyenastart1);
  239.     AISetInstinctWpntMode(hyenastart2);
  240.     AISetInstinctWpntMode(hyenastart3);
  241.  
  242.     for ( n_idx = 0; n_idx < NUM_WAYPOINTS; n_idx = n_idx + 1 )
  243.     {
  244.         AISetWpnt(t_Waypoint00[n_idx], n_idx);
  245.     }
  246.  
  247.     AIConnectWpnts(0, 1);
  248.     AIConnectWpnts(0, 2);
  249.     AIConnectWpnts(1, 4);
  250.     AIConnectWpnts(1, 5);
  251.     AIConnectWpnts(2, 3);
  252.     AIConnectWpnts(2, 8);
  253.     AIConnectWpnts(2, 9);
  254.     AIConnectWpnts(2, 10);
  255.     AIConnectWpnts(3, 4);
  256.     AIConnectWpnts(3, 10);
  257.     AIConnectWpnts(4, 5);
  258.     AIConnectWpnts(5, 12);
  259.     AIConnectWpnts(6, 7);
  260.     AIConnectWpnts(6, 9);
  261.     AIConnectWpnts(6, 13);
  262.     AIConnectWpnts(6, 14);
  263.     AIConnectWpnts(7, 8);
  264.     AIConnectWpnts(8, 9);
  265.     AIConnectWpnts(8, 10);
  266.     AIConnectWpnts(9, 10);
  267.     AIConnectWpnts(9, 11);
  268.     AIConnectWpnts(9, 13);
  269.     AIConnectWpnts(9, 14);
  270.     AIConnectWpnts(10, 11);
  271.     AIConnectWpnts(10, 13);
  272.     AIConnectWpnts(11, 12);
  273.     AIConnectWpnts(11, 13);
  274.     AIConnectWpnts(11, 16);
  275.     AIConnectWpnts(11, 17);
  276.     AIConnectWpnts(12, 17);
  277.     AIConnectWpnts(13, 14);
  278.     AIConnectWpnts(13, 16);
  279.     AIConnectWpnts(14, 15);
  280.     AIConnectWpnts(15, 16);
  281.     AIConnectWpnts(15, 19);
  282.     AIConnectWpnts(16, 17);
  283.     AIConnectWpnts(16, 19);
  284.     AIConnectWpnts(17, 18);
  285.     AIConnectWpnts(18, 19);
  286.     AIConnectWpnts(18, 23);
  287.     AIConnectWpnts(19, 20);
  288.     AIConnectWpnts(20, 21);
  289.     AIConnectWpnts(20, 23);
  290.     AIConnectWpnts(21, 22);
  291.     AIConnectWpnts(22, 23);
  292.  
  293.     AIWpntHuntTarget(hyenastart1, 1.0, 0.0);
  294.     AIWpntHuntTarget(hyenastart2, 1.0, 0.0);
  295.     AIWpntHuntTarget(hyenastart3, 1.0, 0.0);
  296.     
  297.     return;
  298.  
  299. # ========================================================================================
  300. MakeHyenas:
  301. Print("creating hyenas");
  302.  
  303.     n_IndyLastWaypoint = AIFindNearestWpnt(GetLocalPlayerThing());
  304.  
  305.     if (n_IndyLastWaypoint <= 11)
  306.     {
  307.         Print("creating group 2");
  308.         groupnum = 2;
  309.  
  310.         # if indy's not in the jeep and it's in the sector
  311.         # where the hyenas are due, set a new timer and bail out
  312.         if ((GetThingSector(jeep) == group2sector) && (global2 == 0))
  313.         {
  314.             Print("jeep in hyena creation sector; setting new timer and bailing out");
  315.             SetTimerEx(HYENA_CREATION_DELAY, TIMER_ID_CONSIDER_HYENA_CREATION, 0, 0);
  316.             return;
  317.         }
  318.  
  319.     }
  320.     else if (n_IndyLastWaypoint <= 23)
  321.     {
  322.         Print("creating group 0");
  323.         groupnum = 0;
  324.         
  325.         # if indy's not in the jeep and it's in the sector
  326.         # where the hyenas are due, set a new timer and bail out
  327.         if ((GetThingSector(jeep) == group0sector) && (global2 == 0))
  328.         {
  329.             Print("jeep in hyena creation sector; setting new timer and bailing out");
  330.             SetTimerEx(HYENA_CREATION_DELAY, TIMER_ID_CONSIDER_HYENA_CREATION, 0, 0);
  331.             return;
  332.         }
  333.     }
  334.     else
  335.     {
  336.         # Just in case. Create them somewhere
  337.         groupnum = 1;
  338.         
  339.         # if indy's not in the jeep and it's in the sector
  340.         # where the hyenas are due, set a new timer and bail out
  341.         if ((GetThingSector(jeep) == group1sector) && (global2 == 0))
  342.         {
  343.             Print("jeep in hyena creation sector; setting new timer and bailing out");
  344.             SetTimerEx(HYENA_CREATION_DELAY, TIMER_ID_CONSIDER_HYENA_CREATION, 0, 0);
  345.             return;
  346.         }
  347.     }
  348.  
  349.     hyena1 = CreateThing(hyenamodel, hyenaghost1[(groupnum * 3)]);
  350.     hyena2 = CreateThing(hyenamodel, hyenaghost1[(groupnum * 3) + 1]);
  351.     hyena3 = CreateThing(hyenamodel, hyenaghost1[(groupnum * 3) + 2]);
  352.         
  353.     CaptureThing(hyena1);
  354.     CaptureThing(hyena2);
  355.     CaptureThing(hyena3);
  356.     
  357.     AISetInstinctWpntMode(hyena1);
  358.     AISetInstinctWpntMode(hyena2);
  359.     AISetInstinctWpntMode(hyena3);
  360.  
  361.     AIWpntHuntTarget(hyena1, 1.0, 0.0);
  362.     AIWpntHuntTarget(hyena2, 1.0, 0.0);
  363.     AIWpntHuntTarget(hyena3, 1.0, 0.0);
  364.     
  365.     killnum = 0;
  366.  
  367.     return;
  368.  
  369. end
  370.  
  371.